home *** CD-ROM | disk | FTP | other *** search
- #include "proctext.h"
- #include "noise.h"
-
- static float valueTab[TABSIZE];
-
- static void valueTabInit(int seed);
- static float vlattice(int ix, int iy, int iz);
-
- float
- vcnoise(float x, float y, float z)
- {
- int ix, iy, iz;
- int i, j, k;
- float fx, fy, fz;
- float dx, dy, dz;
- float sum = 0;
- static int initialized = 0;
-
- if (!initialized) {
- valueTabInit(665);
- initialized = 1;
- }
-
- ix = FLOOR(x);
- fx = x - ix;
-
- iy = FLOOR(y);
- fy = y - iy;
-
- iz = FLOOR(z);
- fz = z - iz;
-
- for (k = -1; k <= 2; k++) {
- dz = k - fz;
- dz = dz*dz;
- for (j = -1; j <= 2; j++) {
- dy = j - fy;
- dy = dy*dy;
- for (i = -1; i <= 2; i++){
- dx = i - fx;
- dx = dx*dx;
- sum += vlattice(ix+i,iy+j,iz+k)
- * catrom2(dx + dy + dz);
- }
- }
- }
- return sum;
- }
-
- static void
- valueTabInit(int seed)
- {
- float *table = valueTab;
- int i;
- extern long random();
- extern long srandom();
-
- srandom(seed);
- for(i = 0; i < TABSIZE; i++)
- *table++ = 1. - 2.*RANDNBR;
- }
-
- static float
- vlattice(int ix, int iy, int iz)
- {
- return valueTab[INDEX(ix,iy,iz)];
- }
-